<?php

namespace App\Services;


use App\Models\ProductCategory;
use DB;

class ProductCategoryService
{

    /**
     * 获取全部商品分类
     * @return \Illuminate\Database\Eloquent\Collection|\App\Models\ProductCategory[]
     */
    public function getAllProductCategories()
    {
        return ProductCategory::all();
    }

    /**
     * 获取商品分类的树形结构数组
     * @return array
     */
    public function getTreeProductCategory()
    {
        return ProductCategory::getTreeArray($this->getAllProductCategories());
    }

    /**
     * 保存商品分类
     * @param $attr
     * @return \App\Models\ProductCategory
     */
    public function saveProductCategory($attr)
    {
        return ProductCategory::create($attr);
    }

    /**
     * 通过Id获取商品分类
     * @param $id
     * @return \App\Models\ProductCategory
     */
    public function getProductCategoryById($id)
    {
        return ProductCategory::find($id);
    }

    /**
     * 根据给定Id获取其所有的子分类Id
     * @param $id
     * @return array
     */
    public function getAllSubIds($id)
    {
        return ProductCategory::getAllChildrenIds($id);
    }

    /**
     * 根据Id更新商品分类
     * @param $id
     * @param $attr
     * @return bool|int
     */
    public function updateProductCategoryById($id, $attr)
    {
        $productCategory = $this->getProductCategoryById($id);
        return $productCategory->update($attr);
    }

    /**
     * 根据Id删除商品分类，提示删除其子分类
     * @param $id
     */
    public function deleteProductCategoryById($id)
    {
        $arr = ProductCategory::getAllChildrenIds($id);
        DB::transaction(function () use ($arr, $id) {
            if (!empty($arr)) {
                ProductCategory::destroy($arr);
            }
            return ProductCategory::destroy($id);
        });
    }

}